/*
 * Este software muestra por pantalla los datos que nos interesan referentes a la altura y peso
 * de nacimiento y altura y peso real
 * @Autor Miguel González Jiménez
 */
package eac3;

//Importamos la biblioteca necesaria para utilizar el escaner de teclado
import java.util.Scanner;

public class EAC3 {   
    //Definicion de constantes
    public static final int ARRAY_MAX = 10;
    public static final int ARRAY2_MAX = 2;
    public static final int MAX_INTENTS = 3;
    
    public static void main(String[] args) {
        //Creamos el objeto escaner
        Scanner teclat = new Scanner(System.in); 
        
        //Creamos las variables
        String [] noms = {"Pau Serra","Sandra Abad","Mercè Miranda","Marc Gutierrez",
            "Estefan Santos","Albert Gonzalez","Daniel Peña","Lua Alvarez","Marina Roca",
            "Gabriel Buenafuente" };        
        float [][] pesIAlcada  = { {2.4f,3.1f,3.07f,3.7f,2.7f,2.9f,3.2f,3f,3.6f,3.1f,3f},
            {19f,18.7f,22f,24f,17f,18.5f,21f,20f,18.7f,22f,18f},
            {47f,48f,49f,50f,51f,52f,51.5f,50.5f,49.5f,49.1f,50f},
            {101f,104f,106f,107f,107.5f,108f,109f,110f,112f,103f,102f}};        
        float[][] pesIAlcadaNeix = new float[ARRAY2_MAX][ARRAY_MAX];
        float[][] pesIAlcadaActual = new float[ARRAY2_MAX][ARRAY_MAX];
        int intentos = 0;
        int seleccion = 0;
                
        //Introducimos los datos en las matrices nuevas
        for (int ii = 0; ii < ARRAY_MAX; ii++){
            pesIAlcadaNeix[0][ii] = pesIAlcada[0][ii]; //Introducimos los pesos de los recien nacidos
            pesIAlcadaNeix[1][ii] = pesIAlcada[2][ii]; //Introducimos las alturas de los recien nacidos
            pesIAlcadaActual[0][ii] = pesIAlcada[1][ii]; //Introducimos los pesos actuales
            pesIAlcadaActual[1][ii] = pesIAlcada[3][ii]; //Introducimos las alturas actuales
        }

        //Mustra informacion necesaria en pantalla
        System.out.println("Seleccione lo que desea mostrar en pantalla:");
        System.out.println("\t1 (Mostrar los datos de nacimiento)");
        System.out.println("\t2 (Mostrar los datos actuales)");
        System.out.println("\t3 (Mostrar solo datos caracteristicos)");
        
        //Bucle que nos permite hasta 3 intentos, para meter un codigo correcto
        while( intentos < MAX_INTENTS){   
            System.out.print("Codigo ?: "); //Solicita el codigo por pantalla        
            seleccion = teclat.nextInt();           
            
            if(seleccion >0 && seleccion <4){ //Si el valor introducido es correcto
                switch(seleccion){
                    case 1: //Si ha seleccionado mostrar los datos de nacimiento
                        System.out.println("Dades de Naixement");
                        System.out.println("Nom\t\tPes\tAlçada");
                        for (int i = 0; i < ARRAY_MAX; i++){
                            System.out.println(noms[i] + "\t" + pesIAlcadaNeix[0][i]+ "\t" + pesIAlcadaNeix[1][i]);
                        }                        
                        break;
                    case 2: //Si ha seleccionado mostrar los datos actuales
                        System.out.println("Dades Actuals");
                        System.out.println("Nom\t\tPes\tAlçada");
                        for (int i = 0; i < ARRAY_MAX; i++){
                            System.out.println(noms[i] + "\t" + pesIAlcadaActual[0][i]+ "\t" + pesIAlcadaActual[1][i]);
                        }                  
                        break;
                    case 3: //Si ha seleccionado mostrar los datos mas caracteristicos
                        System.out.println("");
                        System.out.println("Dades Caracteristiques:"); //Cabecera de la informacion
                        System.out.println("Pes de Naixement mes baix"); 
                        float Valor = 1000f; //Se crea una variable y se le asigna un valor superior al maximo posible
                        int indexValor = 0; //Se crea una variable que va a indicar que indice de la matriz contendrá el valor buscado
                        for (int i = 0; i < ARRAY_MAX; i++){ //Se realiza la busqueda del valor
                            if(pesIAlcadaNeix[0][i] < Valor){ //Si el valor es mas bajo se actualiza
                                Valor = pesIAlcadaNeix[0][i]; //Actualiza el valor
                                indexValor = i; //Actualiza el indice
                            }
                        }                        
                        System.out.println(noms[indexValor] +"\t"+ pesIAlcadaActual[0][indexValor]); //Muestra la informacion
                        System.out.println("Pes Actual mes Alt"); 
                        Valor = 0f; //Se crea una variable y se le asigna un valor superior al maximo posible
                        indexValor = 0; //Se crea una variable que va a indicar que indice de la matriz contendrá el valor buscado
                        for (int i = 0; i < ARRAY_MAX; i++){ //Se realiza la busqueda del valor
                            if(pesIAlcadaActual[0][i] > Valor){ //Si el valor es mas alto se actualiza
                                Valor = pesIAlcadaActual[0][i]; //Actualiza el valor
                                indexValor = i; //Actualiza el indice
                            }
                        } 
                        System.out.println(noms[indexValor] +"\t"+ pesIAlcadaActual[0][indexValor]); //Muestra la informacion
                        
                        System.out.println("Pes mixja de Naixement"); 
                        Valor = 0f; //Se crea una variable y se le asigna un valor superior al maximo posible el valor buscado
                        for (int i = 0; i < ARRAY_MAX; i++){ //Se realiza la busqueda del valor
                            Valor = Valor + pesIAlcadaNeix[0][i]; //Actualiza el valor
                        } 
                        Valor = Valor / ARRAY_MAX;
                        
                        System.out.println(Valor); //Muestra la informacion
                        System.out.println("Alcada mitjana de Naixement"); 
                        Valor = 0f; //Se crea una variable y se le asigna un valor superior al maximo posible el valor buscado
                        for (int i = 0; i < ARRAY_MAX; i++){ //Se realiza la busqueda del valor
                            Valor = Valor + pesIAlcadaNeix[1][i]; //Actualiza el valor
                        } 
                        Valor = Valor / ARRAY_MAX;
                        System.out.println(Valor); //Muestra la informacion
                        
                        
                        break;
                }
                intentos = 4; //Como ha sido correcto introducimos un valor alto en la variable para que salga del bucle
            }
            else //Si el codigo introducido no es correcto
                System.out.println("El codigo introducido es erroneo!!"); //Indica el error
            intentos++; //Incrementa en uno el numero de reintentos.
        }            
    }
}
